home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1995 June / MacFormat 25.iso / Shareware City / Games / outland-minimum-installer / Outland Minimum Installer / Outland Minimum Installer / Telebit QBlazer < prev    next >
Text File  |  1992-12-20  |  20KB  |  484 lines

  1. ! Version 2.0.1 12/20/92
  2. ! "Telebit QBlazer Modem - 12/10/91" JFK
  3. ! Adapted from the 7/29/91 T1600 script that ships with ARA 1.0
  4. ! 12/10/91 JFK - The QBlazer script is only one line different from the T1600,
  5. !                but in my grand style of "Give them so much more they choke,
  6. !                and then you can run around them..." I added the
  7. !                "Ton'o'comments".
  8. !                And fixed the one line, of course...
  9. ! 12/11/91 JFK - Figured out that S51 needs to be set to 252 on the QBlazer
  10. !                instead of 255 like on the T1600 and T3000.
  11. ! 3/30/92  JFK - Added comments about the hang up sequence.
  12. ! 4/3/92   JFK - Added sbreak in hangup label, added S38 for ATH behavior,
  13. !                moved some commands around for consistency.
  14. ! 5/17/92  JFK - Used "Generic" script along with all it's comments.
  15. !                Also changed speaker volume to low when the it's
  16. !                enabled.
  17. ! 9/27/92  JFK - Added S2=128 to disable the escape sequence, and removed
  18. !                the escape sequence code from label 61.  This allows for
  19. !                the possibility of the data having a TIES pattern in it.
  20. !                Also added a flush in the @HANGUP label to eat the "OK"
  21. !                that a short break returns when online.
  22. ! 10/4/92  JFK - Changed label 64 so that if the modem does not return from
  23. !                the last command, we return an error rather than just exit 0.
  24. ! 12/20/92 JFK - Just added some matchclr's and cleaned things up a bit
  25. !                for consistency.
  26. !                
  27. @ORIGINATE
  28. @ANSWER
  29. !
  30. ! Talk to the modem at 9600 bps.  the QBlazer should auto-baud this
  31. ! unless the user has locked the port to a particular speed.  If it
  32. ! is locked to a different speed, the user will need to change that.
  33. !
  34. serreset 9600, 0, 8, 1
  35. !
  36. !  The idea here is to get the modem into a known state, and then change only 
  37. !  the registers that are necessary to support the connection.  Most of the 
  38. !  time AT&F will be sufficient, but some modems allow the user to change the 
  39. !  F0 parameters.  There isn't much that can be done to prevent this, but if 
  40. !  the modem has any pre-configured configurations that will set most of the 
  41. !  required parameters, use it.
  42. !
  43. ! Recall the factory configuration
  44. !
  45. ! AT&F0 sets:
  46. ! S61=1 - Go into command mode when receiving break from DTE (see
  47. !         @HANGUP for why the script cares about this).
  48. ! S48=0 - Strip the 8th bit off a character before comparing it to
  49. !         the value in S2.  If S2 is set to a number above 127, this
  50. !         allows the script to disable the escape sequence.  This is
  51. !         to allow for the possibility of the escape pattern (TIES)
  52. !         to be in the data stream.  Since the script uses a short
  53. !         break to enter command mode (S61), this should not be a problem.
  54. !
  55. !  Every time the script needs to send commands to the modem, the strategy is:  
  56. !  Clear all matchstrings, look for specific responses, and loop around a 
  57. !  couple of times.  Later in the script, certain loops pause 50-70 seconds, 
  58. !  such as when the script dials a number and is waiting for a connection.  
  59. !  Other times, the script pauses 3-5 seconds and loops around. When the script 
  60. !  is sending commands to the modem, it should expect to see a response within 
  61. !  a couple of seconds, so it's best to look quickly and exit with an error in 
  62. !  a reasonable amount of time so the user does not wait a for a long time 
  63. !  before they are notified that they may need to power-cycle/reset the modem.  
  64. !  When the script is dialing out over a telephone system or PBX, it needs 
  65. !  enough time to make a connection.  In short, if it's communicating to a 
  66. !  modem, loop in 3-7 second increments.  If the script is waiting for 
  67. !  something other than a modem response (like a completed connection or 
  68. !  terminal server) it may need 60-70 seconds.
  69. !
  70. !  If the defaults cannot be set, jump down to label 59, which exits and asks 
  71. !  the user to check out the modem.  If an  AT&F command will not be accepted, 
  72. !  the modem may be hung and needs to be manually reset.
  73. !
  74. settries 0
  75. matchclr
  76. @LABEL 1
  77. matchstr 1 3 "OK\13\10"
  78. write "AT&F0\13"
  79. matchread 20
  80. inctries
  81. iftries 2 59
  82. !
  83. ! Modem is not responding, reset and send a break
  84. !
  85. DTRClear
  86. pause 5
  87. DTRSet
  88. SBreak
  89. jump 1
  90. !
  91. !  The script was able to get the modem into a default factory state.  Now 
  92. !  set the basic hardware type configuration such as command echo, hardware 
  93. !  handshaking, and DTR control.  If the &F9 command had not set up handshaking 
  94. !  this is where it would be done.  It's not desirable to create one long 
  95. !  command string with everything on it because some modems cannot handle a 
  96. !  long command string, and long strings are harder to debug.  It's easy
  97. !  to enter an incorrect S-register value.  For the most part, the following 
  98. !  commands are probably common across a lot of modems, but always look up the 
  99. !  commands in the modem manual.  For V.32 or slower modems, there should not 
  100. !  be any kind of flow control between the modem and the Macintosh.  This is a 
  101. !  different situation from V.32bis and faster modems (which require hardware
  102. !  handshaking).
  103. !
  104. ! Next, Set up the configuration: drop connection after losing DTR
  105. ! Turn off auto answer, command echo, and no DTE flow control. Also configure
  106. ! the modem to basically ignore any type of escape sequence to command mode
  107. ! except a short break.  This is done in case a TIES type escape sequence
  108. ! is in the data stream. 
  109. !
  110. ! &D3   - DTR on/off resets modem 
  111. ! S0=0  - Don't answer calls
  112. ! E0    - Turn command echo off
  113. ! S58=0 - No DTE flow control
  114. ! S2=128 - Set the escape character to ASCII 128.  When this is done
  115. !          and S48 is set to 0 (&F0 did that), the modem will ignore
  116. !          the TIES escape sequence.
  117. !
  118. @LABEL 3
  119. matchclr
  120. matchstr 1 4 "OK\13\10"
  121. write "AT&D3S0=0E0S58=0S2=128\13"
  122. matchread 30
  123. jump 59
  124. !
  125. !  Now that the modem hardware & flow control parameters are set, make sure any 
  126. !  protocol negotiation is disabled, and issue any modem specific features 
  127. !  here.  Make sure that MNP4/V.42, and MNP5-10/V.42bis negotiations are 
  128. !  disabled.  By the way, some V.32/V.32bis modems have an option to disable 
  129. !  Trellis error control,  which is part of the physical layer modulation.  
  130. !  This is not the same as MNP/V.42, and you do not want to disable it!.
  131. !
  132. !  Make sure that the modem is configured so it does NOT require error control 
  133. !  to complete a link.  ARA 1.0 does all error correction/data compression in 
  134. !  software.  All ARA wants is the fastest raw data pipe it can get.  If the 
  135. !  script spends time trying to negotiate some error control, the modems and/or 
  136. !  Remote Access may time out.
  137. !
  138. !  Also note the S38 configuration.  It is noted later in the script that it is 
  139. !  desirable to ensure that the modem's buffer has transmitted all of it's data 
  140. !  before it actually hangs the modem up.  This ability appears to be 
  141. !  implemented on a lot of modems.
  142. !
  143. !  This set of commands is going to be implemented differently on different
  144. !  vendors modems.  In this example, Telebit uses S registers. Other modems may 
  145. !  use S registers (but different registers), or \ commands, or % commands; you 
  146. !  get the idea.  (Did I mention that you really, really want to have your 
  147. !  modem manual handy?)
  148. !
  149. !  It is important that the modem is configured so that it returns
  150. !  the connected speed, NOT the DTE speed.  The script need to know what the 
  151. !  real line speed is in order to set ARA's internal timers.  Some
  152. !  modems don't have the option to display the line speed.  In that case the 
  153. !  performance of the connection may not be optimal.
  154. !
  155. ! Next, disable MNP/error control, internal buffering, delay before
  156. ! disconnect, issue extended result codes, and set speaker volume.
  157. !
  158. ! S180=0 - Turn off all error detection/correction (ARA does MNP and
  159. !          compression itself.  It needs these turned off in the modem).
  160. ! S181=0 - Turn off DTE <-> line buffering if there is no error control.
  161. !                           The idea is to have the Macintosh communicate
  162. !                           with the modem at the line speed of the modem.
  163. ! S38=255  - Wait until the modem's buffer is clear OR the other modem 
  164. !            disconnects after an ATH is issued before dropping the line.
  165. !            This is done to ensure that all any data in the modem's buffer
  166. !            has been transmitted to the remote modem before it disconnects.
  167. !            If the remote connection does not receive the
  168. !            disconnect packet (usually the last one sent) it could take
  169. !            up to 45 seconds for the remote connection to timeout and
  170. !            disconnect.
  171. ! X2    - Issue extended result codes.  This will display busy, connect XXX, 
  172. !         etc.  X2 will say "CONNECT XXX"  Where XXX is the line speed.  This 
  173. !         is so ARA can determine what speed the modems are communicating at 
  174. !         to set the serial port speed.
  175. ! L1    - Set speaker volume to low when it is enabled.  The QBlazer speaker
  176. !         defaults to high, which seems to be a bit much for it's speaker.
  177. !
  178. @LABEL 4
  179. matchclr
  180. matchstr 1 5 "OK\13\10"
  181. write "ATS180=0S181=0S38=255X2L1\13"
  182. matchread 30
  183. jump 59
  184. !
  185. !  The modem should now be properly configured.  Now check to see if the user 
  186. !  has turned off the modem speaker.  If they have, send an additional command 
  187. !  to turn it off.
  188. !
  189. ! If speaker on flag is true, jump to label 8.  Else turn off the speaker
  190. !
  191. @LABEL 5
  192. ifstr 2 8 "1"
  193. matchclr
  194. matchstr 1 8 "OK\13\10"
  195. write "ATM0\13"
  196. matchread 30
  197. jump 59
  198. !
  199. ! The modem is ready so enable answering, or originate a call
  200. !
  201. @LABEL 8
  202. ifANSWER 30
  203. note "Dialing ^1" 3
  204. write "ATS0=0DT^1\13"
  205. !
  206. !  Be aware that different modems will have different format strings 
  207. !  to return connection results.  You need to understand the different possible 
  208. !  strings and set this area (and then answer area at label 31) to the 
  209. !  appropriate value.  Also, remember that the modem was configured to return 
  210. !  the connect speed if possible (The X2 command up at label 5).  It's also 
  211. !  useful if the modem can return busy, no dialtone, etc. since the script will 
  212. !  be able to exit quicker and let the user know what is going on.
  213. !
  214. !  Also note that the script waits at the bottom of label 9 for a 70 seconds, 
  215. !  rather then looping around.  Why?  Well, if the script re-issues the dial 
  216. !  command too soon, that would cause the modem to hang up.  At this point the 
  217. !  script should wait a reasonable amount of time for one of these strings to 
  218. !  return from the modem and take the appropriate action.
  219. !
  220. @LABEL 9
  221. matchclr
  222. matchstr  1 11 "CONNECT 1200\13\10"
  223. matchstr  2 12 "CONNECT 2400\13\10"
  224. matchstr  3 13 "CONNECT 4800\13\10"
  225. matchstr  4 14 "CONNECT 9600\13\10"
  226. matchstr  5 15 "CONNECT FAST\13\10"
  227. matchstr  6 50 "NO CARRIER\13\10"
  228. matchstr  7 50 "ERROR\13\10"
  229. matchstr  8 52 "NO DIALTONE\13\10"
  230. matchstr  9 53 "BUSY\13\10"
  231. matchstr 10 54 "NO ANSWER\13\10"
  232. matchread 700
  233. jump 59
  234. !
  235. !  All that is done for different connect speeds is to set the serial port
  236. !  speed on the Macintosh to match the line speed.
  237. !
  238. @LABEL 11
  239. note "Communicating at 1200 bps." 2
  240. serreset 1200, 0, 8, 1
  241. jump 16
  242. !
  243. @LABEL 12
  244. note "Communicating at 2400 bps." 2
  245. serreset 2400, 0, 8, 1
  246. jump 16
  247. !
  248. @LABEL 13
  249. note "Communicating at 4800 bps." 2
  250. serreset 4800, 0, 8, 1
  251. jump 16
  252. !
  253. @LABEL 14
  254. note "Communicating at 9600 bps." 2
  255. serreset 9600, 0, 8, 1
  256. jump 16
  257. !
  258. @LABEL 15
  259. note "Communicating at 19.2 kbps." 2
  260. serreset 19200, 0, 8, 1
  261. !
  262. !  At this point the modems have connected.  If the script is answering a 
  263. !  telephone call, just exit right away and starting communicating.  If the 
  264. !  script is dialing out, give the other end some time (3 seconds in this 
  265. !  example) to get ready to talk to this modem.  Exit 0 tells Remote Access 
  266. !  that the script was successful in attempting a connection.
  267. !
  268. @LABEL 16
  269. ifANSWER 17
  270. pause 30
  271. @LABEL 17
  272. exit 0
  273. !
  274. !  Notice that the @ANSWER label is actually a comment here, and that 
  275. !  @ORIGINATE and @ANSWER start at the same place.  What's the point of having 
  276. !  separate entry points if they are not used?  Well, in the case of modems, 
  277. !  when they dial out or wait for a call, the setup is usually the same.  One 
  278. !  reason for separate entry points is when the script is not directly talking 
  279. !  to a modem, but maybe to a PBX or terminal server.  It may be necessary to 
  280. !  have completely different configuration for answering and originating 
  281. !  connections.
  282. !
  283. ! @ANSWER
  284. ! Set up the modem to answer
  285. !
  286. @LABEL 30
  287. matchclr
  288. matchstr 1 31 "OK\13\10"
  289. write "ATS0=1\13"
  290. matchread 30
  291. jump 59
  292. !
  293. !  What is userhook 1 doing in label 32?  Here's the idea:  Either this script 
  294. !  controls a server that is waiting to answer the telephone, or it's waiting 
  295. !  for a callback to a connection that was initiated.  AppleTalk Remote Access 
  296. !  does a "passive" listen on the serial port (via the Serial Port Arbitrator) 
  297. !  so that other communications applications can use the serial port when ARA 
  298. !  is not using it.  When a call comes in for a server or callback, there
  299. !  will be about 5-14 seconds while the modems negotiate the connection.
  300. !  What would happen if a communications application on this Macintosh 
  301. !  wanted to use the serial port during that time?  Both connections
  302. !  would fail.  The userhook 1 command tells ARA to mark the serial port in 
  303. !  use.  When that happens, applications that want to use the serial port will 
  304. !  be told it's busy, and the incoming connection can complete.  With that in 
  305. !  mind, the strategy below is:  When the modem receives a ring, jump to label 
  306. !  32, issue the userhook 1 command, then jump back up to label 31, wait for 
  307. !  the connect result code and continue processing the script.
  308. !
  309. @LABEL 31
  310. matchstr 1  32 "RING\13\10"
  311. matchstr 2  11 "CONNECT 1200\13\10"
  312. matchstr 3  12 "CONNECT 2400\13\10"
  313. matchstr 4  13 "CONNECT 4800\13\10"
  314. matchstr 5  14 "CONNECT 9600\13\10"
  315. matchstr 6  15 "CONNECT FAST\13\10"
  316. matchstr 7  50 "NO CARRIER\13\10"
  317. matchstr 8  50 "ERROR\13\10"
  318. matchstr 9  52 "NO DIALTONE\13\10"
  319. matchstr 10 53 "BUSY\13\10"
  320. matchstr 11 54 "NO ANSWER\13\10"
  321. matchread 700
  322. jump 31
  323. !
  324. @LABEL 32
  325. userhook 1
  326. note "Answering phone..." 2
  327. jump 31
  328. !
  329. !  These are some common error messages when the line is busy, no dialtone, 
  330. !  etc. They are documented in the Scripting Language Guide.  When the script 
  331. !  exits with a code other than zero, Remote Access knows that the connection 
  332. !  failed, and will inform the user with a dialog.
  333. !
  334. ! 50: error messages
  335. !
  336. @LABEL 50
  337. exit -6021
  338. !
  339. @LABEL 52
  340. exit -6020
  341. !
  342. @LABEL 53
  343. exit -6022
  344. !
  345. @LABEL 54
  346. exit -6023
  347. !
  348. @LABEL 59
  349. exit -6019
  350. !
  351. ! Hang up the modem
  352. ! Note:  Why try to enter command mode and hang up the line with ATH, when 
  353. !        de-asserting DTR will always work, and it is used as a last resort 
  354. !        anyway?  If DTR is used immediately,  the modem will hang up 
  355. !        immediately.  This can have the ill effect of hanging up before all 
  356. !        the data in the modem's internal transmit buffer has been sent.
  357. !        It is very desirable to have the last byte of data sent make
  358. !        it out of the modem and across the phone line.  Typically,
  359. !        the last packet sent is the disconnect packet, and if
  360. !        the other side misses this packet, it may have to wait up to 45 
  361. !        seconds to hang up.
  362. !
  363. @HANGUP
  364. @LABEL 60
  365. settries 0
  366. @LABEL 61
  367. !
  368. !  Here's the basic logic for hanging up: If the modem can be configured
  369. !  to enter command mode when it receives a short break, send a short
  370. !  break.  Send an ATH to hang the line up (and if possible up in the 
  371. !  configuration, set the modem to attempt to send all the data in the 
  372. !  buffer before it disconnects).  If that fails, it must still be on
  373. !  line, so send the escape sequence to try to drop into command mode.
  374. !  Don't issue a short break again since it did not work the first time.
  375. !  If that fails, de-assert DTR which should force the modem to hang up
  376. !  (make sure the cable is wired properly for this option!).
  377. !  If +++ worked, don't send a short break again; flush the serial port 
  378. !  buffer in case the ATH failed due to any stray data hanging around.
  379. !
  380. !  How was this sequence determined?  Trial and error.  Different vendor's 
  381. !  modems behave differently when disconnecting.  Some modems will not enter 
  382. !  command modem during a disconnect, and the only option is to de-assert DTR 
  383. !  to force them to reset.  That's why DTR resets the modem instead of just
  384. !  disconnecting it!  Experiment with this sequence to make it function, but it 
  385. !  should work with the majority of the modems available.
  386. !
  387. ! Now, since the Telebit modems will drop into command mode when they receive
  388. ! a short break (S61=1), issue one here.  This will speed up the disconnect
  389. ! sequence by about 5-6 seconds.  Then continue on with normal AT disconnect
  390. ! processing.
  391. !
  392. Sbreak
  393. !
  394. ! Pause for the result code "OK" to return from the modem, then flush it from
  395. ! the input buffer.  Wait just a brief amount of time (1/2 second in this case)
  396. ! so the modem will be ready to accept the ATH command.  Pause 1 actually seems
  397. ! to work ok, but it's set to 5 just to be safe.
  398. !
  399. pause 1
  400. flush
  401. pause 5
  402. matchclr
  403. matchstr 1 63 "OK\13\10"
  404. matchstr 2 63 "NO CARRIER\13\10"
  405. matchstr 3 63 "ERROR\13\10"
  406. write "ATH\13"
  407. matchread 30
  408. inctries
  409. iftries 3 63
  410. !
  411. ! No response, so try de-asserting DTR.  If this script is going to be
  412. ! modified to use either the Hayes guard time or TIES escape sequence,
  413. ! this is the point where it would be attempted.  The commands are left in
  414. ! the script for that possibility, but they are commented out for the T3000
  415. ! and WorldBlazer.  Also note that LABEL 62 is only called by the matchstr
  416. ! below, so it is commented out as well.
  417. !
  418. !matchclr
  419. !matchstr 1 62 "OK\13\10"
  420. !write "+++"
  421. !matchread 15
  422. !
  423. ! No Response from modem, de-assert DTR
  424. !
  425. DTRClear
  426. pause 5
  427. DTRSet
  428. jump 61
  429. !
  430. !@LABEL 62
  431. !!
  432. !! Pause 1 second to ensure we meet the escape time delay, or
  433. !! to allow the modem time to be ready for the next command.
  434. !!
  435. !pause 10
  436. !flush
  437. !matchclr
  438. !matchstr 1 63 "OK\13\10"
  439. !matchstr 2 63 "NO CARRIER\13\10"
  440. !matchstr 3 63 "ERROR\13\10"
  441. !write "ATH\13"
  442. !matchread 30
  443. !jump 61
  444. !
  445. !  Now that the modems have disconnected, and the script has possibly reset the 
  446. !  modem, restore the factory settings.  Remember, the script may have hung up 
  447. !  the modem in order to get ready for a callback, or it wants to get ready to 
  448. !  wait to answer a call again.
  449. !
  450. ! Recall factory settings
  451. !
  452. @LABEL 63
  453. matchclr
  454. matchstr 1 64 "OK\13\10"
  455. write "AT&F0\13"
  456. matchread 30
  457. !
  458. !  Now turn off auto answer if it was turned on to answer a call.  If this 
  459. !  script controls a server, the @ANSWER sequence will be called by ARA.
  460. !  One other thing to watch out for here is that some modems expect to
  461. !  talk to the DTE at the last connected speed.  If this is a V.32 
  462. !  modem and it just finished a connection with a 2400 baud modem, it
  463. !  doesn't necessarily want to talk at 2400 the next time!  Some modems
  464. !  don't exhibit this behavior, so play with it and see what happens.  Finally, 
  465. !  since it successfully hung up,  exit the script with a result code of 0 to 
  466. !  let Remote Access know everything worked.
  467. !
  468. ! Turn off auto answer,  set S51 so modem will check interface speed on 
  469. ! next command.  This is different than the Telebit T1600/T3000, which wants 
  470. ! S51=255.
  471. !
  472. ! S51=252 - Automatic speed selection, type ahead not permitted.
  473. ! S0=0    - Don't answer the phone if it rings.
  474. !
  475. @LABEL 64
  476. matchclr
  477. matchstr 1 65 "OK\13\10"
  478. write "ATS51=252S0=0\13"
  479. matchread 40
  480. jump 59
  481. !
  482. @LABEL 65
  483. exit 0
  484.